module pe.managed.metadata { export class TableCompletionReader { constructor(private _tableStream: TableStream, private _metadataStreams: MetadataStreams) { this.lookupResolutionScope = this._createLookup(TableReader.resolutionScopeTables);
this.lookupTypeDefOrRef = this._createLookup(TableReader.typeDefOrRefTables);
readString(index: number): string { return this._tableStream.stringIndices[index];
readGuid(index: number): string { return this._metadataStreams.guids[index];
copyFieldRange(fields: FieldInfo[], start: number, end?: number) { this._copyDefRange(fields, TableKind.Field, start, end);
copyMethodRange(methods: MethodInfo[], start: number, end?: number) { this._copyDefRange(methods, TableKind.MethodDef, start, end);
copyParamRange(parameters: ParameterInfo[], start: number, end: number) { this._copyDefRange(parameters, TableKind.Param, start, end);
private _copyDefRange(defs: any[], tableKind: TableKind, start: number, end?: number) { var table = this._tableStream.tables[tableKind];
if (!end && typeof end === "undefined")
for (var i = start - 1; i < end - 1; i++) { lookupResolutionScope: (codedIndex: number) => any;
lookupTypeDefOrRef: (codedIndex: number) => TypeReference;
private _createLookup(tables: number[]): (codedIndex: number) => any { var tableKindBitCount = calcRequredBitCount(tables.length);
return (codedIndex: number) => { var rowIndex = codedIndex >> tableKindBitCount;
var tableKindCode = codedIndex - (rowIndex << tableKindBitCount);
var tableKind = tables[tableKindCode];
var table: any[] = this._tableStream.tables[tableKind];
var row = table[rowIndex-1];
resolveTypeReference(resolutionScope: any, namespace: string, name: string): Type { readFieldSignature(field: FieldInfo, blobIndex: number) {